import os
import sys
import math
import json
import copy
import zipfile
import time
from .geoProfileGpro import *

from typing import Any, Optional, List, Dict, Tuple, Set, Union

def kjf_to_profile1D(kjf_file):
    """para:kjf_file为kjf文件所在的位置，比如d:/test/geo5file.kjf"""
    ...
def optimum_nodes_connection(start_node, node_set):
    """
    取代connected_nodes_sequence函数
    :param start_boring: 起始钻孔，具体为PreProfile1D对象
    :param boring_set: 所有待处理钻孔列表
    """
    ...
def get_uniform_profile1DSet(start_boring, boring_set, profile2d: bool = False):
    """
    取代uniforming_boringSet函数
    :param start_boring: 起始钻孔
    :param boring_set: 所有待处理钻孔列表
     :return: 已经统一化层序的钻孔(UniProfile1D对象或者PreProfile1D)列表
    """
    ...
def distance(p1, p2):
    """
    :param p1: first node,PointClass type
    :param p2: second node,PointClass type
    :return: distance between two node，float type
    """
    ...
def find_node_by_id(id, node_set):
    ...
def connected_nodes_sequence(start_node, node_set):
    """
    :param start_node:
    :param node_set:
    :return:connected_nodePair 依次对比的节点（钻孔）对
    """
    ...
def connected_nodes_sequence_for_profile2D(start_node, node_set):
    """
    二维剖面的钻孔处理对连接顺序。与普通的连接顺序思路不一样，该函数确保剖面上的相邻钻孔能连接成对，并进行智能连线
    :param start_node:起始钻孔，设置为剖面的第一个钻孔
    :param node_set:剖面上所有的钻孔对
    :return:connected_nodePair 依次对比连线的节点（钻孔）对
    """
    ...
def uniforming_borings(b1, b2):
    """
    :param b1: 已经处理过的钻孔
    :param b2: 需要处理的钻孔
    :return:更新b1，b2的地层，没有返回
    """
    ...
def uniforming_borings_partmiddle(b1, b2):
    """
    顶底连线已经确定后，计算地层的统一化层序
    :param b1:
    :param b2:
    :return:
    """
    ...
def cal_bottom_gap(layer1, layer2):
    ...
def cal_top_gap(layer1, layer2):
    ...
def borings_split_by_topAndBottomLine(b1, b2):
    """
    将两个对比钻孔，用两种地层连线分成上下两部分,并返回分割后的钻孔
    :param b1:
    :param b2:
    :return:
    """
    ...
def borings_split_partdown_by_topAndBottomLine(b1, b2):
    """
    针对顶线分割后的下部钻孔，再次用地层连线分成上下两部分,并返回。两个钻孔的最上一层不需要再次寻找顶连线，因为他们默认是连接在一起的
    :param b1:
    :param b2:
    :return:
    """
    ...
def borings_split_partup_by_topAndBottomLine(b1, b2):
    """
    针对底线分割后的上部钻孔，再次用地层连线分成上下两部分,并返回。两个钻孔的最下一层不需要再次寻找连线，因为他们默认是连接在一起的
    :param b1:
    :param b2:
    :return:
    """
    ...
def borings_split_partmiddle_by_topAndBottomLine(b1, b2):
    """
    针对顶底线已经相连的中间钻孔，再次用寻找分割连线,并返回。两个钻孔的顶底不需要再次寻找连线，因为他们默认是连接在一起的
    :param b1:
    :param b2:
    :return:
    """
    ...
def processing_borings_by_topAndBottomLine(b1, b2):
    """
    作用：分割钻孔->统一层序->合并统一化后的钻孔并返回
    :param b1:
    :param b2:
    :return:
    """
    ...
def processing_borings_partmiddle_by_topAndBottomLine(b1, b2):
    """
    作用：分割钻孔->统一层序->合并统一化后的钻孔并返回
    :param b1:
    :param b2:
    :return:
    """
    ...
def processing_borings_partup_by_topAndBottomLine(b1, b2):
    """
    作用：分割钻孔->统一层序->合并统一化后的钻孔并返回
    :param b1:
    :param b2:
    :return:
    """
    ...
def processing_borings_partdown_by_topAndBottomLine(b1, b2):
    """
    作用：分割钻孔->统一层序->合并统一化后的钻孔并返回
    :param b1:
    :param b2:
    :return:
    """
    ...
def sorting_layers_in_borings(boring_set):
    """
    将一个钻孔集合中的出现的所有地层进行排序
    要求地层编号必须是按照这种格式来输入：1-1-1，必须用短划线分割，且必须为纯数字，不能有非数字字符
    :param boring_set:
    :return:
    """
    ...
def reflesh_borings_by_new_uniformNum(boring_set, new_boring):
    """
    用统一化后的新孔层序，更新已经统一层序化后的钻孔
    :param boring_set:
    :param new_boring:
    :return:
    """
    ...
def uniforming_boringSet(start_boring, boring_set):
    """
    :param start_boring: 起始钻孔
    :param boring_set: 所有待处理钻孔列表
    :return: 已经统一化层序的钻孔列表
    """
    ...
def convert_json_to_boringSet(bores_info_json_path, geo_layers_json_path):
    ...

class DevNull:
    def write(self, x):
        ...
    def flush(self):
        ...

class CheckProfile1Dset:
    """对一个一维剖面（钻孔）集合进行检查，内容包括：1）钻孔编号是否重复；2）钻孔位置是否重复；3）是否有偏离太大的钻孔"""
    def __init__(self) -> Any:
        ...
    def coincident_location(cls, prePro1Set: list = None, remove: bool = True):
        """
        检查集合中是否有位置重合的钻孔。
        
        para:remove 是否将第二次出现的重复钻孔删除
        return：错误信息字典列表
        """
        ...
    def identical_bore_num(cls, prePro1Set: list = None, remove: bool = True):
        """
        检查集合中是否有位置重合的钻孔。
        para:remove 是否将第二次出现的重复钻孔删除
        
        return：错误信息字典列表
        """
        ...
